package com.wx.gof.pattern.behavioral.mediation;

/**
 * @ClassName Application
 * @Author wx
 * @Description
 * 定义:
 * 创建一个(封装一组对象如何交互)的对象就是中介者,这样这些对象就可以不用彼此耦合,而且允许中介者独立地改变它们之间的交互。
 * 描述:
 * 这个中介者常常起着中间桥梁的作用，使其他的对象可以利用中介者完成某些行为活动
 * 适用场景:
 * 1.系统中对象之间存在复杂的引用关系，产生的相互依赖关系结构混乱且难以理解
 * 2.交互的公共行为，如果需要改变行为则可以增加新的中介类制定新的规则,达到扩展的目的
 * 优点:
 * 1.将一对多转换化成了一对一，降低程序复杂度
 * 2.类之间的解耦-由之前的直接引用变成了间接引用
 * 缺点:
 * 1.中介类过多，导致系统复杂
 * 理解:
 * 应用程序-中介者模式(适用于把一对多的关系变成一对一，多个对象直接互相交互影响,转变成每个对象只需要对应中介者即可)
 * @Date 2018-12-15-0:04
 */
public class Application {
    public static void main(String[] agrs){
        AbstractColleague collA = new ColleagueA();
        AbstractColleague collB = new ColleagueB();

        AbstractMediator am = new Mediator(collA, collB);

        System.out.println("==========通过设置A影响B==========");
        collA.setNumber(1000, am);
        System.out.println("collA的number值为："+collA.getNumber());
        System.out.println("collB的number值为A的10倍："+collB.getNumber());

        System.out.println("==========通过设置B影响A==========");
        collB.setNumber(1000, am);
        System.out.println("collB的number值为："+collB.getNumber());
        System.out.println("collA的number值为B的0.1倍："+collA.getNumber());
    }
}
